package com.hjj.jvm.oom;

/**
 * <h2>虚拟机栈和本地方法栈</h2>
 *
 * <p>hotspot不区分虚拟机栈和本地方法栈。</p>
 * <p>在《java虚拟机规范》中描述了两种异常：</p>
 * <p>1. 如果线程请求的栈深度大于锁允许的最大深度，将抛出StackOverflowError异常。</p>
 * <p>2. 如果虚拟机的栈内存允许动态扩展，当扩展容量无法申请到足够的牛内存时，将抛出OutOfMemoeryError异常。</p>
 * <p>VM Args: -Xss128k</p>
 */
public class JavaVMStackSOF {
    private int stackLength = 1;

    public void stackLeak() {
        stackLength++;
        stackLeak();
    }

    public static void main(String[] args) {
        JavaVMStackSOF oom = new JavaVMStackSOF();
        try {
            oom.stackLeak();
        } catch (Throwable e) {
            System.out.println("stackLeak: " + oom.stackLength);
            e.printStackTrace();
        }
    }

}
